package cycling.taxi.com.base;

import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

import cycling.taxi.com.utils.UiUtil;

/**
 * 预留一个层次，可以添加组件和 方法
 * Created by sixsix on 16/8/25.
 */
public abstract class BaseFragment extends Fragment {

    private LoadDataUi mLoadDataUi;

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {

        // 需要一个Fragment 对应一个 mLoadDataUi
        if (mLoadDataUi == null) {
            mLoadDataUi = new LoadDataUi(UiUtil.getContext()) {
                @Override
                protected View getSuccessView() {
                    return OnInitSuccessView();//抽象方法，抛给子类自己去实现
                }
                //由于这个是父类，也不知道子类要怎么处理。所以使用抽象方法，让子类去实现
                @Override
                protected Result getDataFromServer() {
                    return doInbackground();
                }
            };
        }
        return mLoadDataUi;
    }

    protected abstract View OnInitSuccessView();

    protected abstract LoadDataUi.Result doInbackground();

    /**
     * fragment  挂载到activity中触发，表示所有View初始化完成，关注 Fragment的生命周期
     */
    @Override
    public void onActivityCreated(@Nullable Bundle savedInstanceState) {
        // 如果mLoadDataUi重复多次的创建的就会导致多次的 mLoadDataUi.loadData()
        // 为了实现 懒加载 ，所以在Fragment 的生命周期中 不再加载页面数据了，而是在选中页面时候加载
        super.onActivityCreated(savedInstanceState);
        mLoadDataUi.loadData(); //因为网络请求到状态封装在loadDataUi中，所以loadData也放在这个类去出来

    }

    public void loadSelect(){
//        mLoadDataUi.loadData(); //因为网络请求到状态封装在loadDataUi中，所以loadData也放在这个类去出来
    }

}
